//
// Created by andyljn on 2021/10/13.
//

#ifndef HOME_PCB_CONFIG_H
#define HOME_PCB_CONFIG_H
#include "c_types.h"
#include "ets_sys.h"
#include "os_type.h"
#include "mem.h"
#include "osapi.h"
#include "user_interface.h"
#include "config.h"
#include "../driver/include/cJSON.h"

#define CONFIG_FLASH_ADDRESS 0X77

#define VERSION "v1.0"


#define CFG_FLAG 0X56

#define MQTT_HOST "47.113.199.9"

#define MQTT_PORT 1883



#define MQTT_USER "andy"
#define MQTT_PWD "123456"


#define WIFI_SSID "TP-LINK_2D7"

#define WIFI_PWD "lch123456"

#define RYT_COUNT 10

// 继电器数量
#define RELAY_COUNT 2

// 设备类型
#define DEVICE_TYPE 1

//射频解码数据结构体,将3字节的16进制转换为字符串
typedef struct {
    u8 code[12];
}RF_Code;



/**
 * 继电器控制结构体
 * */
typedef struct {
    u8 relayNum;  // 表示几号继电器 0开始
    u8 ctl;    // 控制开或关，0关  1 开 2 开和关
    u8 isOk;   //是否找到，找到为1 未找到为0
}Relay_t;

Relay_t ICACHE_FLASH_ATTR findRelayCtl(u8 * rfCode);
typedef struct {
    //第1个控制点允许接入10个任意贴开关
    RF_Code onCode[RYT_COUNT];
    RF_Code offCode[RYT_COUNT];
    //代表目前码值得存储位置
    u8 codeCount;
}RF_Data;


// wifi名称及密码，及mqtt相关配置
typedef struct {
    uint8_t wifi_ssid[32];
    uint8_t wifi_pwd[64];
    uint8_t mqtt_host[64];
    uint32_t mqtt_port;
    uint8_t mqtt_user[64];
    uint8_t mqtt_pwd[64];
}TCPData;


//所有配置参数结构体
typedef struct {
    uint32_t cfg_flag;//参数是否初始化，初始化为0x55
    RF_Data rfData[RELAY_COUNT];//射频数据,这里定义RELAY_COUNT个开关
    TCPData tcpData;//wifi及mqtt相关配置
    int type;    // 设备的类型
    int offDelay; //延时关闭时间单位s

}Config_Data;
cJSON * getLocalAllData(int code);
void ICACHE_FLASH_ATTR save_data(void);
extern Config_Data configData;
void ICACHE_FLASH_ATTR config_init(void);
void ICACHE_FLASH_ATTR saveTcpData(TCPData tcpData);
u8 ICACHE_FLASH_ATTR saveRfData(int relayNum,u8 * rfCode,u8 onAndOff);
u8 ICACHE_FLASH_ATTR removeRfData(int relayNum,u8 * rfCode);
#endif //HOME_PCB_CONFIG_H
